package com.baiyue.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.baiyue.entity.UserEntity;
import com.baiyue.model.SelectOptionsResult;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

/**
 * @author WuBo
 */
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {
    /**
     * 查询所有
     *
     * @param page
     * @param userDo
     * @return 用户列表
     */
    List<UserEntity> findAll(UserEntity userDo, Pagination page);

    /**
     * 查询状态为3的用户-----已删除的用户
     * @param username
     * @param start
     * @param end
     * @param page
     * @return
     */
    List<UserEntity> findDelStatusUser(String username,String start,String end,String sortField,String sortValue,Pagination page);
    /**
     * 根据用户名查询
     *
     * @param username
     * @return
     */
    UserEntity findByUsername(String username);

    /**
     * 根据用户名进行查询，排除当前用户名
     * @param username
     * @return
     */
    UserEntity findByUser(String username);

    /**
     * 根据手机号进行查询，排除当前用户名
     * @param phone
     * @return
     */
    UserEntity findByPhone(String phone);

    /**
     * 根据手机号进行查询，排除当前用户名
     * @param email
     * @return
     */
    UserEntity findByEmail(String email);

    /**
     * 根据用户名模糊查询
     * @param username 需要模糊查询的用户名
     * @return
     */
    /*List<UserEntity> findVagueByUsername(String username,Pagination page,String startTime);*/



    /**
     * 根据id实现批量删除，假删除
     * @return
     */
    Integer deleteUserAllById(List<Integer> idList);

    /**
     * 实现真删除用户
     * @param id
     */
    void deleteUserAll(Long[] id);

    /**
     * 根据id 删除，修改status 字段  2：删除 1：停用 0：正常
     * @param id
     */
    void deleteUserId(Integer id);

    /**
     * 恢复账号，可批量，可单条
     * @param id
     */
    void recoveryUser(Long[] id);

    /**
     * 更新用户时间
     * @param id
     * @param time
     */
    void updateTime(Long[] id, Date time);

    /**
     * 根据ID查询权限
     * @param id
     * @return
     */
    String findAllowedMenuIds(Integer id);

    /**
     * 查询所需的下拉框值
     * @return
     */
    List<SelectOptionsResult> findUserAndEmail();

    /**
     * 根据id批量查询
     * @param ids
     * @return
     */
    List<String> batchSelectById(List<Integer> ids);

    /**
     * 根据邮箱删除
     * @param email
     */
    Integer deleteByEmail(String email);
}
